当我强制转换或转换为字符串时,SQL认为我的表名是完整表的问题
所以我遇到了一个字符串转换的问题。我什么都试过了。我的目标是将循环中的值放入表中。但是,我可以获取字段值,但无法获取表名值,因为sql认为我调用的是表而不是字符串。我已经试过了。以下是代码示例:当我强制转换或转换为字符串时,SQL认为我的表名是完整表的问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,所以我遇到了一个字符串转换的问题。我什么都试过了。我的目标是将循环中的值放入表中。但是,我可以获取字段值,但无法获取表名值,因为sql认为我调用的是表而不是字符串。我已经试过了。以下是代码示例: DECLARE @C varchar(65) DECLARE @FieldName varchar(50) SET @FieldName = 'ProjectID' SELECT @C = MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABL
DECLARE @C varchar(65)
DECLARE @FieldName varchar(50)
SET @FieldName = 'ProjectID'
SELECT @C = MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table'
CREATE TABLE #temp_t (
[field] varchar(100),
[tblname] varchar(100)
)
WHILE @C is not null
BEGIN
DECLARE @qbExists int
DECLARE @tblname varchar(100)
SET @tblname = CONVERT(varchar(100), @C)
SELECT @qbExists = COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @C AND COLUMN_NAME = @FieldName
IF @qbExists = 1 AND
@C <> 'TimeExpenseUnionQuery' AND
@C <> 'TimeExpense' AND
@C <> 'BC_BA' AND
@C <> 'BC_BE' AND
@C <> 'BC_EL' AND
@C <> 'BC_TE'
BEGIN
EXEC('
SELECT ' + @FieldName + ', ' + @C + ' FROM ' + @tblName +'
')
END
SELECT @C = MIN( TABLE_NAME ) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME > @C
END
SELECT * FROM #temp_t
DROP TABLE #temp_t
问题子项位于从“++@tblName”中选择“++@FieldName+”、“++@C++”的范围内。
现在,如果我不使用@C,它可以正常工作。如果我试图转换或强制转换@C,我会得到一个无效的列名?给出了什么?您需要引用它使其成为常数,因为动态SQL需要加倍
EXEC('
SELECT ' + @FieldName + ', ''' + @C + ''' FROM ' + @tblName +'
')
使用动态SQL是不是一个好主意是另一回事…您需要引用它使其成为常量,因为动态SQL需要加倍使用
EXEC('
SELECT ' + @FieldName + ', ''' + @C + ''' FROM ' + @tblName +'
')
使用动态SQL是不是一个好主意是另一回事…看起来您正在尝试执行:
SELECT <fieldname>, <tablename> FROM <same tablename>
您的意思是将表名用引号括起来吗?看起来您正在尝试执行:
SELECT <fieldname>, <tablename> FROM <same tablename>
您的意思是将表名放在引号中吗?在开发动态SQL解决方案时,有一件事总是一个好主意,就像您在这里所做的那样,那就是首先打印出语句,并确保它看起来像您想要的那样。我认为其他回答者都有其要点:似乎您正试图打印出表名的字符串文字。如果是这样的话,您需要在执行的查询中用引号将其括起来,这意味着您在构建查询时需要做一些工作。在开发动态SQL解决方案时,像您在这里所做的一样,有一件事始终是一个好主意,那就是首先打印出语句,并确保它看起来像您希望的那样。我认为其他回答者都有其要点:似乎您正试图打印出表名的字符串文字。如果是这种情况,则需要在执行的查询中用引号将其括起来,这意味着在构建查询时需要做一些工作。我爱你,哇,我怎么会错过这一点。非常感谢你,伙计!我爱你,哇,我怎么会错过呢。非常感谢你,伙计!