sql - TSQL - 动态创建表和插入

标签 sql sql-server tsql sql-server-2008-r2

我在动态创建表并将其插入其中时遇到了一些麻烦。我已经尝试了多种方法,但无法产生理想的结果。请参阅下面的我正在尝试做的事情的简化版本。请注意,这只是一次尝试 - 我也尝试过其他尝试(例如 INSERT INTO [table] EXEC(@exe) ),但也没有成功。

每次我尝试下面时,我都会收到一条消息

Command(s) completed successfully

但还没有创建表。

我使用的是 SQL Server 2008 R2。

DECLARE @sqlText nvarchar

SET @sqlText = 
N'
IF OBJECT_ID(''[BudgetProcedures].dbo.UnitOccupancy'', ''U'') IS NOT NULL
DROP TABLE [BudgetProcedures].dbo.UnitOccupancy;

CREATE TABLE [BudgetProcedures].dbo.UnitOccupancy (Property varchar(15)
                                                    ,Unit varchar(15)
                                                    ,YearLength varchar(15)
                                                    ,Lease varchar(15));

INSERT INTO [BudgetProcedures].[dbo].[UnitOccupancy] (Property, Unit, YearLength, Lease)

(SELECT ''ExProp''  
,''ExUnit''
,''ExYrlen''
,''ExLease''
)
'

EXEC(@sqlText)

最佳答案

您需要声明为:

DECLARE @sqlText nvarchar(1000)

否则默认长度为 1。而且由于您在语句开头有新行,因此不会引发语法异常(您的查询仅包含新行符号,并且它是合法的)。删除新行,你会得到一个错误。

https://msdn.microsoft.com/en-us/library/ms176089.aspx

When n is not specified in a data definition or variable declaration statement, the default length is 1.

您可以使用:

print @sqlText

看看你的陈述是什么样的。

关于sql - TSQL - 动态创建表和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424199/

相关文章:

sql - SQL 中的 SUM 值从另一个表中的特定点开始

tsql - T-SQL : Salted Passwords

mysql - 具有比较日期的嵌套子查询

sql-server - SQL Aggregate 使用滞后函数创建动态列

sql - firebird中的按位运算符

sql-server - SQL Server 查询中的自定义总和

sql - sp_executesql 参数大小限制

sql - 创建索引所需的最小行数是多少?

mysql - sql中的固定数字数据类型

mysql - SQL 为 MySQL 上的帐户选择最后一条记录